//--------------------------------------------------
// Todo報告ダイアログ
//--------------------------------------------------

App.ProjectDlgConfirm = function(config) {
    // スーパークラスコンストラクタ呼び出し
    App.ProjectDlgConfirm.superclass.constructor.call(this, config);
};

// App.ModalDialogを継承
Ext.extend(App.ProjectDlgConfirm, App.ModalDialog, {
    container:     'dlg_tsk_confirm',// コンテナエレメントのID（オーバーライド）
    width:         450,// ダイアログの幅（オーバーライド）
    height:        'auto',// ダイアログの高さ（オーバーライド）
    task_id:       null,
    progress_rate: null,

    /**
     * 関数名：onDocLoaded
     * 概　要：ドキュメントロードイベントハンドラ
     * 引　数：なし
     * 戻り値：なし
     */
    onDocLoaded : function(eventObject, target)
    {
        // スーパークラスの処理を実行
        App.ProjectDlgConfirm.superclass.onDocLoaded.call(this, eventObject, target);
    },

    /**
     * 関数名：fncCreateDialog
     * 概　要：コンテナエレメントに対して、ダイアログオブジェクトを生成する
     *     ：（初期表示時に呼び出される）
     * 引　数：なし
     * 戻り値：なし
     */
    fncCreateDialog : function()
    {
        App.ProjectDlgConfirm.superclass.fncCreateDialog.call(this);// スーパークラスの処理を実行
        this.fncRender(); // ページレンダリング
        this.fncSetEvent();// 各イベント設定
    },

    /**
     * 関数名：fncRender
     * 概　要：ページをレンダリングする
     * 引　数：なし
     * 戻り値：なし
     */
    fncRender : function()
    {
        var xg = Ext.grid;
        var reader = new Ext.data.ArrayReader({}, this.store);

        this.store = new Ext.data.JsonStore({
            reader: reader,
            fields: [
                {name: 'report_user', mapping: 'report_user'},
                {name: 'report_date', mapping: 'report_date'},
                {name: 'progress_rate', mapping: 'progress_rate'},
                {name: 'content', mapping: 'content'}
            ]
        });
        var expander = new xg.RowExpander({
            tpl : new Ext.Template(
                '<p style="padding:10px;">{content}</p>'
            )
        });
        var grid1 = new xg.GridPanel({
            store: this.store,
            cm: new xg.ColumnModel([
                //expander,
                {header: app_localized_message('label', 'report_date'), width: 80, sortable: true, dataIndex: 'report_date'},
                {id:'content',header: app_localized_message('label', 'content'), width: 40, sortable: true, dataIndex: 'content'},
                {header: app_localized_message('label', 'progress_rate'), width: 60, sortable: true, dataIndex: 'progress_rate', align:'right'},
                {id:'report_user',header: "報告者", width: 60, sortable: true, dataIndex: 'report_user'}// @TODO: ローカライズメッセージに変更
           ]),
            viewConfig: {
                forceFit: false
            },
            width: 420,
            height: 240,
            //plugins: expander,
            collapsible: false,
            autoExpandColumn: 'content',
            animCollapse: false,
            //title: 'タスク進捗',
            iconCls: 'icon-grid',
            renderTo: 'dlg_tsk_confirm_reports'
        });
    },

    /**
     * 関数名：fncSetEvent
     * 概　要：当該ページのイベントハンドラを設定する
     * 引　数：なし
     * 戻り値：なし
     */
    fncSetEvent : function()
    {
        // 閉じるボタンクリックイベント設定
        Ext.get('dlg_tsk_confirm_close').on('click', this.onClose, this, true);
    },


    /**
     * 関数名：fncReset
     * 概　要：ダイアログ内容をリセットする（初期表示時、再表示時に呼び出される）
     * 引　数：なし
     * 戻り値：なし
     */
    fncReset: function()
    {
        // ダイアログに入力されている値のクリア
        Ext.get('dlg_tsk_report_form').dom.reset();

        var info_prefix = 'dlg_tsk_confirm_task_data_';
        var nb = '&nbsp;';
        Ext.get(info_prefix+'name').dom.innerHTML          = nb;
        Ext.get(info_prefix+'complete_date').dom.innerHTML = nb;
        Ext.get(info_prefix+'progress_rate').dom.innerHTML = nb;
        Ext.get(info_prefix+'report_date').dom.innerHTML   = nb;
    },

    /**
     * fncDataLoad
     */
    fncDataLoad: function()
    {
        var p = {
            id: this.task_id
        }
        var o = {
            url:     url_for('/task/dlg_confirm'),
            params:  p,
            success: this.onSuccessDataLoad,
            failure: this.onFailureDataLoad,
            scope:   this
        }
        Ext.Ajax.request(o);
    },

    /**
     * 関数名：fncDataSet
     * 概　要：入力フォームデータをセットする
     * 戻り値：なし
     */
    fncDataSet : function(data)
    {
        if(!data) return false;

        var comp = data.comp;
        var task = data.task;

        var info_prefix = 'dlg_tsk_confirm_task_data_';
        var nb = '&nbsp;';

        Ext.get(info_prefix+'name').dom.innerHTML = comp.item_name;
        var complete_date = (task.complete_date || nb) + nb + app_localized_message('label', 'complete_date');
        Ext.get(info_prefix+'complete_date').dom.innerHTML = complete_date;
        var progress_rate  = '(' + app_localized_message('label', 'progress_rate') + ')' + nb + (task.progress_rate || nb) + nb;
        Ext.get(info_prefix+'progress_rate').dom.innerHTML = progress_rate;
        var report_date    = '(' + app_localized_message('label', 'report_date') + ')' + nb +  (task.report_date || nb);
        Ext.get(info_prefix+'report_date').dom.innerHTML = report_date;
    },


    /**
     * 関数名：onBeforeShow
     * 概　要：ダイアログ表示前イベントハンドラ。
     *     ：必要なデータをロードする。
     * 引　数：dlg           Ext.BasicDialog  ダイアログオブジェクト
     * 戻り値：なし
     */
    onBeforeShow : function(dlg)
    {
        //ダイアログセットする
        this.fncDataSet();
        this.fncDataLoad();
    },


    onSuccessDataLoad: function(r, options)
    {
        var r = Ext.util.JSON.decode(r.responseText);
        if (r.success) {
            //this.fncShowReports(r.result);
            this.fncDataSet(r.result);
            this.store.loadData(r.result.histories)
        } else {
            alert(r.message);
        }
    },
    onFailureDataLoad: function(r)
    {
        
    },

    onClose : function()
    {
        this.dialog.hide();
        this.fncExecCallback("on_close");
    }
});
//=============================
// 現在のページオブジェクトのdialogsメンバーに設定
//=============================
App.Page.thispage.dialogs.ProjectDlgConfirm = new App.ProjectDlgConfirm() ;